package com.wxmp.dubbo.dto;

import java.io.Serializable;
import java.sql.Timestamp;
import java.util.HashMap;
import java.util.Map;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

/**
 * 前后端统一消息定义协议 Message  之后前后端数据交互都按照规定的类型进行交互
 * @author song.wang
 * @date 2019年1月22日
 */
@ApiModel(value="Message",description="返回对象")
public class Message implements Serializable{
	private static final long serialVersionUID = 1L;
	
	/**消息头meta 存放状态信息 code message*/
	@ApiModelProperty(value = "消息头", name = "meta", example = "{success:true,code:100,msg:'成功',timestamp:2019-03-19 12:12:12}")
    private Map<String,Object> meta = new HashMap<String,Object>();
    /**消息内容  存储实体交互数据*/
	@ApiModelProperty(value = "消息内容", name = "data", example = "{nickname:'hexagon',imageUrl:'',status:true}")
    private Map<String,Object> data = new HashMap<String,Object>();

    public Map<String, Object> getMeta() {
        return meta;
    }

    public Message setMeta(Map<String, Object> meta) {
        this.meta = meta;
        return this;
    }

    public Map<String, Object> getData() {
        return data;
    }

    public Message setData(Map<String, Object> data) {
        this.data = data;
        return this;
    }
    public Message addMeta(String key, Object object) {
        this.meta.put(key,object);
        return this;
    }
    public Message addData(String key,Object object) {
        this.data.put(key,object);
        return this;
    }
    /**
     * statusCode 说明
     * 1000：成功<br>
     * 1001：域用户校验，默认通过<br>
     * 2001：登录认证失败：无用户<br>
     * 2002：登录认证失败：用户名密码错误<br>
     * 2003：登录认证失败：参数错误<br>
     * 2101：授权失败：无效的token<br>
     * 2102：授权失败：无效的用户<br>
     * 2103：授权失败：参数错误<br>
     * 9000：后台错误
     * 
     * @author song.wang
     * @date 2019年1月22日
     * @param statusCode
     * @param statusMsg
     * @return Message
     * 
     * 更新日志
     * 2019年1月22日 song.wang 首次创建
     */
    public Message ok(int statusCode,String statusMsg) {
        this.addMeta("success",Boolean.TRUE);
        this.addMeta("code",statusCode);
        this.addMeta("msg",statusMsg);
        this.addMeta("timestamp",new Timestamp(System.currentTimeMillis()));
        return this;
    }
    /**
     * statusCode 说明
     * 1000：成功 <br>
     * 1001：域用户校验，默认通过<br>
     * 2001：登录认证失败：无用户 <br>
     * 2002：登录认证失败：用户名密码错误 <br>
     * 2003：登录认证失败：参数错误 <br>
     * 2101：授权失败：无效的token <br>
     * 2102：授权失败：无效的用户 <br>
     * 2103：授权失败：参数错误 <br>
     * 9000：后台错误
     * @author song.wang
     * @date 2019年1月22日
     * @param statusCode
     * @param statusMsg
     * @return Message
     * 
     * 更新日志
     * 2019年1月22日 song.wang 首次创建
     */
    public Message error(int statusCode,String statusMsg) {
        this.addMeta("success",Boolean.FALSE);
        this.addMeta("code",statusCode);
        this.addMeta("msg",statusMsg);
        this.addMeta("timestamp",new Timestamp(System.currentTimeMillis()));
        return this;
    }

	@Override
	public String toString() {
		return "Message [meta=" + meta + ", data=" + data + "]";
	}
    
}
